// 版权归Go作者所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build debuglog 

package runtime

const dlogEnabled = true

// dlogPerM是每米调试日志数据。这是嵌入在m 
// 结构中的。
type dlogPerM struct {
	dlogCache *dlogger
}

// GetCachedLogger如果可以高效地返回缓存的dlogger，则返回该dlogger，否则返回零。返回的dlogger将归其所有。
func getCachedDlogger() *dlogger {
	mp := acquirem()
	// 如果在
	// 信号堆栈上运行，我们不会返回缓存的数据记录器，以防信号在
	// get/PUTCHACHEDDLOGGER中到达。（可惜我们没有非原子
	// 交换！）
	var l *dlogger
	if getg() != mp.gsignal {
		l = mp.dlogCache
		mp.dlogCache = nil
	}
	releasem(mp)
	return l
}

// PutCachedLogger试图将l返回到本地缓存。如果失败，则返回false。
func putCachedDlogger(l *dlogger) bool {
	mp := acquirem()
	if getg() != mp.gsignal && mp.dlogCache == nil {
		mp.dlogCache = l
		releasem(mp)
		return true
	}
	releasem(mp)
	return false
}
